RxJava2是一套處理非同步(asynchronous)事件的library。Android開發經常會用到非同步(asynchronous)機制,像是網路連線、資料庫存取和其他耗時的工作,而RxJava2可以大量簡化這些繁瑣的過程,只要一行程式就能在background和UI thread之間切換。而RxJava是基於觀察者的模式來設計的。
在RxJava中,有發送資料流程然後終止資料流程的Observable物件,以及訂閱Observable的Observer物件。
Observer訂閱的Observable發送值、錯誤、或完成信號後,Observer會接收到通知。
1.方便的處理線程切換的問題。
2.當邏輯代碼越來越複雜,RxJava2仍可保持可讀性。
一樣的請到build.grade(Module: app)的dependencies加入依賴。
dependencies{
implementation "io.reactivex.rxjava2:rxandroid:2.1.1"
implementation 'io.reactivex.rxjava2:rxjava:2.2.21'
implementation 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
}
這次的範例是來觀察Retorfit接收資料,因為Retorfit講解過了我就跳過了。
但在建立Retrofit記得要加上下面第四行,才能跟Retorfit連動。
retrofit2.Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://jsonplaceholder.typicode.com/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())//設定RxJava2。
.build();
這邊找到我們要觀察的對象,並把它設為被觀察者。
public interface ApiService {
@GET("posts/1")
Observable<post> getpost();
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//new出實例
ApiClient apiClient=new ApiClient();
//呼.getpost()的方法,並建立RxJava。
apiClient.getApiService().getpost()
.subscribeOn(Schedulers.io())//subscribe() 這個方法所在的線程
.observeOn(AndroidSchedulers.mainThread())//Subscriber 回調所運行在的線程
.subscribe(new Observer<post>() {
//在訂閱後發送數據之前,會首先調用。
// Disposable可用於取消訂閱。
@Override
public void onSubscribe(Disposable d) {
Log.e("Note", "獲取 subscribe");
}
//處理的事件。
@Override
public void onNext(post post) {
Log.e("Note", post.getId());
Log.e("Note", post.getUserId());
Log.e("Note", post.getTitle());
Log.e("Note", post.getBody());
}
//事件處理過程中出現異常情況時。
@Override
public void onError(Throwable e) {
Log.e("Note", "獲取失敗");
}
//事件處理完成。
@Override
public void onComplete() {
Log.e("Note", "獲取完成");
}
});
}
}